﻿#ifndef CSERVER_H
#define CSERVER_H

#include <QString>
#include <QTcpSocket>
#include <QObject>

const int FTP_PORT = 29;
const int BUFLEN = 255;
const int DATABUFLEN = 1024;

struct SServerConfig
{
    QString strUserName;
    QString strPassWord;
    int     iMaxClient;
    bool    bAllowAnony;
    bool    bConfiged;
    QString strWorkDir;
};

class CServer : public QObject
{
    Q_OBJECT
public:
    CServer();
    ~CServer();

    bool init();

    int listenClient();
    bool waitMessage(QString str);//等待客户端发送信息

    SServerConfig  m_sServerConfig;//服务器的配置信息，用于Client登录验证
    QTcpSocket*    m_pClientSocket = nullptr;//连接该服务器的客户端Socket, 用于向客户端发送信息

    QString        m_strCMD = "";//客户端发送的命令
    QString        m_strArg = "";//客户端发送的命令参数
    bool           m_bRecvData = false;//服务器端是否收到客户端发来的数据，用于标记processThread是否进行处理
    QString        m_strRecvData = "";//收到的客户端发来的数据，数据格式为：“命令:命令参数”
    QString        m_strWorkDir = "";//FTP服务器的工作目录
    int            m_iSizePackLast = 0;

signals:
    int sig_sendMessage(QString str);//向客户端发送信息


private slots:
    void slot_ReadyRead();
    void slot_Connected();
    void slot_Disconnected();
    void slot_Error(QAbstractSocket::SocketError socketError);
};

#endif // CSERVER_H
